home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 22 / Cream of the Crop 22.iso / program / ctlib100.zip / INSTALL.LZH / CTLISTS.INT < prev    next >
Text File  |  1996-10-12  |  6KB  |  184 lines

  1. {**************************************************************************}
  2. {*  BitSoft Development, L.L.C.                                           *}
  3. {*  Copyright (C) 1995, 1996 BitSoft Development, L.L.C.                  *}
  4. {*  All rights reserved.                                                  *}
  5. {*  Linked list objects unit                                              *}
  6. {*  Version 2.2.8                                                         *}
  7. {**************************************************************************}
  8.  
  9. unit ctLists;
  10.  
  11. {$X+}
  12.  
  13. interface
  14.  
  15. uses Objects,
  16.      Containr, ctTypes;
  17.  
  18. type
  19.   PListNode = ^TListNode;
  20.   TListNode = object(TNode)
  21.       Next : PListNode;
  22.     constructor Init;
  23.     constructor Load (var S : TStream);
  24.     destructor Done; virtual;
  25.     procedure Delete; virtual;
  26.     procedure DeleteNext; virtual;
  27.     function Insert (NewNode : PListNode) : Boolean; virtual;
  28.     function InsertBefore (NewNode : PListNode) : Boolean; virtual;
  29.     function Prev : PListNode; virtual;
  30.     procedure Store (var S : TStream);
  31.   end;  { TListNode }
  32.  
  33. type
  34.   PDoubleNode = ^TDoubleNode;
  35.   TDoubleNode = object(TListNode)
  36.       PrevNode : PDoubleNode;
  37.     constructor Init;
  38.     constructor Load (var S : TStream);
  39.     procedure Delete; virtual;
  40.     procedure DeleteNext; virtual;
  41.     function Insert (NewNode : PListNode) : Boolean; virtual;
  42.     function InsertBefore (NewNode : PListNode) : Boolean; virtual;
  43.     function Prev : PListNode; virtual;
  44.   end;  { TDoubleNode }
  45.  
  46. type
  47.   PStringListNode = ^TStringListNode;
  48.   TStringListNode = object(TListNode)
  49.       {$ifdef Windows}
  50.       Text : PChar;
  51.       {$else}
  52.       Text : PString;
  53.       {$endif WIndows}
  54.     {$ifdef Windows}
  55.     constructor Init (AString : PChar);
  56.     {$else}
  57.     constructor Init (AString : String);
  58.     {$endif Windows}
  59.     constructor Load (var S : TStream);
  60.     destructor Done; virtual;
  61.     function KeyOf : Pointer; virtual;
  62.     procedure Store (var S : TStream);
  63.   end;  { TStringListNode }
  64.  
  65. type
  66.   PStringDoubleNode = ^TStringDoubleNode;
  67.   TStringDoubleNode = object(TDoubleNode)
  68.       {$ifdef Windows}
  69.       Text : PChar;
  70.       {$else}
  71.       Text : PString;
  72.       {$endif WIndows}
  73.     {$ifdef Windows}
  74.     constructor Init (AString : PChar);
  75.     {$else}
  76.     constructor Init (AString : String);
  77.     {$endif Windows}
  78.     constructor Load (var S : TStream);
  79.     destructor Done; virtual;
  80.     function KeyOf : Pointer; virtual;
  81.     procedure Store (var S : TStream);
  82.   end;  { TStringDoubleNode }
  83.  
  84. type
  85.   PList = ^TList;
  86.   TList = object(TSequence)
  87.       LastNode : PListNode;
  88.     constructor Init;
  89.     constructor Load (var S : TStream);
  90.     destructor Done; virtual;
  91.     function At (Index : LongInt) : Pointer; virtual;
  92.     function AtDelete (Index : LongInt) : Boolean; virtual;
  93.     function AtFree (Index : LongInt) : Boolean; virtual;
  94.     function AtInsert (Index : LongInt; Item : Pointer) : Boolean; virtual;
  95.     function AtPut (Index : LongInt; Item : Pointer) : Boolean; virtual;
  96.     function DeleteAll : Boolean; virtual;
  97.     function Empty : Boolean; virtual;
  98.     function FreeAll : Boolean; virtual;
  99.     function Head : PListNode; virtual;
  100.     function IndexOf (Item: Pointer) : LongInt; virtual;
  101.     function Last(var Index : LongInt) : Pointer; virtual;
  102.     procedure Store (var S : TStream);
  103.     function Tail : PListNode; virtual;
  104.   private
  105.     CurrentNode : PListNode;
  106.     PreviousNode : PListNode;
  107.     CurrentIndex : LongInt;
  108.   end;  { TList }
  109.  
  110. type
  111.   PDoubleList = ^TDoubleList;
  112.   TDoubleList = object(TList)
  113.     function At (Index : LongInt) : Pointer; virtual;
  114.     function FreeAll : Boolean; virtual;
  115.   end; { TDoubleList }
  116.  
  117. type
  118.   PSortedList = ^TSortedList;
  119.   TSortedList = object(TList)
  120.       CaseSensitive : Boolean;
  121.       Duplicates : Boolean;
  122.     constructor Init;
  123.     constructor Load (var S : TStream);
  124.     function Insert (Item : Pointer) : Boolean; virtual;
  125.     function Search (Key : Pointer; var Index : LongInt) : Boolean; virtual;
  126.     procedure Store (var S : TStream);
  127.   end;  { TSortedList }
  128.  
  129. type
  130.   PSortedDoubleList = ^TSortedDoubleList;
  131.   TSortedDoubleList = object(TSortedList)
  132.     function At (Index : LongInt) : Pointer; virtual;
  133.     function FreeAll : Boolean; virtual;
  134.   end; { TSortedDoubleList }
  135.  
  136.  
  137. procedure DisposeList (var List : PListNode);
  138.  
  139. function GetList (var S : TStream) : PListNode;
  140.  
  141. function PutList (var S : TStream; List : PListNode) : Boolean;
  142.  
  143. procedure RegisterLists;
  144.  
  145. const
  146.   RList : TStreamRec = (
  147.     ObjType : idList;
  148.     VmtLink : Ofs(TypeOf(TList)^);
  149.     Load    : @TList.Load;
  150.     Store   : @TList.Store);
  151.  
  152.   RDoubleList : TStreamRec = (
  153.     ObjType : idDoubleList;
  154.     VmtLink : Ofs(TypeOf(TDoubleList)^);
  155.     Load    : @TDoubleList.Load;
  156.     Store   : @TDoubleList.Store);
  157.  
  158.   RSortedList : TStreamRec = (
  159.     ObjType : idSortedList;
  160.     VmtLink : Ofs(TypeOf(TSortedList)^);
  161.     Load    : @TSortedList.Load;
  162.     Store   : @TSortedList.Store);
  163.  
  164.   RSortedDoubleList : TStreamRec = (
  165.     ObjType : idSortedDoubleList;
  166.     VmtLink : Ofs(TypeOf(TSortedDoubleList)^);
  167.     Load    : @TSortedDoubleList.Load;
  168.     Store   : @TSortedDoubleList.Store);
  169.  
  170.   RStringListNode : TStreamRec = (
  171.     ObjType : idStringListNode;
  172.     VmtLink : Ofs(TypeOf(TStringListNode)^);
  173.     Load    : @TStringListNode.Load;
  174.     Store   : @TStringListNode.Store);
  175.  
  176.   RStringDoubleNode : TStreamRec = (
  177.     ObjType : idStringDoubleNode;
  178.     VmtLink : Ofs(TypeOf(TStringDoubleNode)^);
  179.     Load    : @TStringDoubleNode.Load;
  180.     Store   : @TStringDoubleNode.Store);
  181.  
  182. implementation
  183. end.
  184.